package com.ww.learn.coroutine.context

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.newSingleThreadContext
import kotlinx.coroutines.runBlocking

fun main() = runBlocking<Unit> {
    launch { // 运行在父协程的上下文中，即runBlocking主协程
        // 它从启动了它的CoroutineScope中承袭了上下文（以及调度器），此时从main线程中的runBlocking主协程承袭上下文
        println("main runBlocking: I'm working in thread ${Thread.currentThread().name}")
    }
    launch(Dispatchers.Unconfined) { // 不受限，将工作在主线程中
        // Dispatchers.Unconfined是一个特殊的调度器且似乎也运行在main线程中
        println("Unconfined: I'm working in thread ${Thread.currentThread().name}")
    }
    launch(Dispatchers.Default) { // 将会获取默认调度器
        // 当协程在GlobalScope中启动时，使用的是由Dispatchers.Default代表的默认调度器。默认调度器使用共享的后台线程池。
        // launch(Dispatchers.Default){}与GlobalScope.launch{}使用相同的调度器
        println("Default: I'm working in thread ${Thread.currentThread().name}")
    }
    launch(newSingleThreadContext("MyOwnThread")) { // 将使它获得一个新线程
        // 启动了一个线程，一个专用的线程是一种非常昂贵的资源。
        println("newSingleThreadContext: I'm working in thread ${Thread.currentThread().name}")
    }
}